/**
  ******************************************************************************
    @file    stm32f4xx_crc.c
    @author  MCD Application Team
    @version V1.4.0
    @date    04-August-2014
    @brief   This file provides all the CRC firmware functions.
  ******************************************************************************
    @attention

    <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>

    Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
    You may not use this file except in compliance with the License.
    You may obtain a copy of the License at:

           http://www.st.com/software_license_agreement_liberty_v2

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

  ******************************************************************************
*/

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_crc.h"

/** @addtogroup STM32F4xx_StdPeriph_Driver
    @{
*/

/** @defgroup CRC
    @brief CRC driver modules
    @{
*/

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/** @defgroup CRC_Private_Functions
    @{
*/

/**
    @brief  Resets the CRC Data register (DR).
    @param  None
    @retval None
*/
void CRC_ResetDR(void)
{
	/* Reset CRC generator */
	CRC->CR = CRC_CR_RESET;
}

/**
    @brief  Computes the 32-bit CRC of a given data word(32-bit).
    @param  Data: data word(32-bit) to compute its CRC
    @retval 32-bit CRC
*/
uint32_t CRC_CalcCRC(uint32_t Data)
{
	CRC->DR = Data;
	return (CRC->DR);
}

/**
    @brief  Computes the 32-bit CRC of a given buffer of data word(32-bit).
    @param  pBuffer: pointer to the buffer containing the data to be computed
    @param  BufferLength: length of the buffer to be computed
    @retval 32-bit CRC
*/
uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength)
{
	uint32_t index = 0;
	for(index = 0; index < BufferLength; index++)
		CRC->DR = pBuffer[index];
	return (CRC->DR);
}

/**
    @brief  Returns the current CRC value.
    @param  None
    @retval 32-bit CRC
*/
uint32_t CRC_GetCRC(void)
{
	return (CRC->DR);
}

/**
    @brief  Stores a 8-bit data in the Independent Data(ID) register.
    @param  IDValue: 8-bit value to be stored in the ID register
    @retval None
*/
void CRC_SetIDRegister(uint8_t IDValue)
{
	CRC->IDR = IDValue;
}

/**
    @brief  Returns the 8-bit data stored in the Independent Data(ID) register
    @param  None
    @retval 8-bit value of the ID register
*/
uint8_t CRC_GetIDRegister(void)
{
	return (CRC->IDR);
}

/**
    @}
*/

/**
    @}
*/

/**
    @}
*/

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
